<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
	<TITLE></TITLE>
	<META NAME="GENERATOR" CONTENT="OpenOffice.org 2.0  (Linux)">
	<META NAME="CREATED" CONTENT="20060911;3385100">
	<META NAME="CHANGED" CONTENT="20060911;19171500">
	<STYLE TYPE="text/css">
	<!--
		@page { size: 21cm 29.7cm; margin: 2cm }
		P { margin-bottom: 0.21cm }
	-->
	</STYLE>
</HEAD>
<BODY LANG="es-AR" DIR="LTR">
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><B>Integrantes:</B></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm">Rodrigo Carreras
	<FONT COLOR="#000000">(rcarreras86@gmail.com)</FONT></P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm">Franco Pellegrini 
	<FONT COLOR="#000000">(frapell@gmail.com)</FONT></P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm">Matias C&oacute;rdoba 
	<FONT COLOR="#000000">(cormatias@gmail.com)</FONT></P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><B>Grupo</B>:08</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><B>Fecha de Entrega:</B> 11
de Septiembre del 2006</P>
<UL>
	<P ALIGN=LEFT STYLE="margin-bottom: 0cm; page-break-before: always"></P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><U><B>INTRODUCCION</B></U></P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm">En este informe se detallar&aacute;
la implementaci&oacute;n del &ldquo;baash&rdquo;, es decir funciones
utilizadas, Tipos Abstractos de Datos (TAD's), Herramientas
Utilizadas y formas de organizaci&oacute;n del trabajo. Para ello se
podr&aacute;n observar distintos diagramas y especificaciones de los
pasos seguidos, para lograr el producto final &ldquo;baash&rdquo;.</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm; page-break-before: always">
<U><B>Implementaci&oacute;n </B></U>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">A continuaci&oacute;n se
explicara de manera general, como fue implementado el interprete de
lineas de comando (shell), al estilo de Bourne shell. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">El programa se encuentra
dividido en m&oacute;dulos que satisfacen distintas partes de la
ejecuci&oacute;n del mismo, ellos son:</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>Presentaci&oacute;n
	(presentacion.c):</B><SPAN STYLE="font-weight: medium"> se encarga
	de imprimir mensajes en de intruducci&oacute;n en el Baash.</SPAN></P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium">
	<B>Cargar (carga.c):</B> Carga los caracteres que ingresa el
	usuario, y los almacena. Retorna dichos caracteres.</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium">
	<B>Parseo</B> (spipe.c, scommand.c, parser.c): Toma la cadena de
	caracteres antes almacenada y la particiona en una estructura
	spipeline.</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium">
	<B>Transformador</B> (transformer.c): toma el spipeline antes
	creado, y coloca los paths correspondientes a cada comando.</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium">
	<B>Ejecuci&oacute;n</B> (ejecutar.c, builtin.c): es la parte
	encargada de ejecutar los comandos que se encuentran en el
	spipeline.</P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><U><B>DIAGRAMA DE
EJECUCI&Oacute;N</B></U></P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><IMG SRC="informe_html_m61149970.png" NAME="gr&aacute;ficos2" ALIGN=CENTER WIDTH=626 HEIGHT=231 BORDER=0><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Se escogi&oacute; dicha
implementaci&oacute;n ya que se considero apropiada para distribuir
las distintas etapas que tenia la ejecuci&oacute;n. Cada una de las
partes est&aacute;n intercomunicadas a trav&eacute;s del traspaso de
estructuras que permiten que esto sea posible. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Esta intercomunicaci&oacute;n
entre partes da lugar a la modularizaci&oacute;n, permitiendo as&iacute;
que se obtenga un c&oacute;digo mas legible y claro.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Adoptar esta
modularizaci&oacute;n permiti&oacute; una equitativa divisi&oacute;n
de las tareas para cada uno de los integrantes del grupo. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm; page-break-before: always">
<BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT SIZE=4><U><B>Breve
descripci&oacute;n de los archivos incluidos.</B></U></FONT></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>presentacion.c:</B>
funci&oacute;n que imprime un mensaje en la pantalla al comenzar la
ejecuci&oacute;n. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>cargar.c : </B>Contiene
funciones encargadas de cargar el texto desde la entrada estandar.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>scommand.c spipe.c</B>
: Es en donde se encuentran contenidos los TAD utilizados para la
implementaci&oacute;n.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>string_tokenizer.c:</B>
funciones proporcionadas por la c&aacute;tedra, que dividen un texto
dependiendo del separador ingresado.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>parser.c</B>:
funciones encargadas de tomar un string y ingresarlo dentro de una
estructura spipeline, para su posterior manipulaci&oacute;n.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>tranformer.c</B>:
funciones encargadas  encontrar el PAHT de un comando en caso de que
este exista y de modificar dicho comando. (ej: ls  ---&gt; /BIN/ls).</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>builtin.c</B>:
contiene funciones encargadas de ejecutar los comandos builtin
desarrollados (CD y EXIT).</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>ejecutar.c:</B>
funciones encargadas de ejecutar los comando ingresados en una
estructura spipeline, a trav&eacute;s de las llamadas del sistema. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><B>bool.h:</B>
definiciones del tipo bool.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; page-break-before: always">
<BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT SIZE=4><U><B>Especificaci&oacute;n
de los TAD's utilizados</B></U></FONT></P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm; text-decoration: none">Diagrama
de Estructuras</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><IMG SRC="informe_html_6fdeabe6.png" NAME="gr&aacute;ficos1" ALIGN=CENTER WIDTH=613 HEIGHT=427 BORDER=0><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><U><B>TAD scommand</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Este
tipo abstracto es el encargado de almacenar los comandos introducidos
por el usuario, sin una divisi&oacute;n de pipe (&ldquo;|&rdquo;)
(ej: grep prueba &lt; a.in &gt; a.out).</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Las
funciones y procedimientos que posee permiten: 
</P>
<OL>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">
	Introducir comandos</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">
	Extraer comandos</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">
	Almacenar redirectores</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">
	Obtener informaci&oacute;n acerca de los estados de estos mismos.</P>
</OL>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">El
TAD fue implementado, con arreglos de string's (char **), variables
booleanas y enteras. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Este
proporciona un listado de funciones que permiten al programador
manipular el tipo, sin tener que acceder a la estructura interna del
mismo, es decir, manteniendo as&iacute; una abstracci&oacute;n del
TAD.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Las
funciones y procedimientos son varios para enumerarlos, pero algunos
de ellos son: 
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><B><I>scommand_t
scommand_create() </I></B><SPAN STYLE="font-weight: medium"><SPAN STYLE="font-style: normal">Crea
un TAD  scommand</SPAN></SPAN></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><B><I>scommand_destroy(scommand_t
sc)</I></B> Destruye el scommand.</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><B><I>scommand_push_back(scommand_t
sc, const char *str) </I></B>Introduce un comando a la estructura.</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><B><I>char
*scommand_get_front(scommand_t sc) </I></B>Retorna un comando de la
estructura.</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Pero
la utilizaci&oacute;n de este TAD no satisface los requerimientos del
programa, ya que no es practico para implementar comandos que
contengan el | (pipe).</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">para
ello se creo el TAD:</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><U> <B>TAD spipeline</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Dentro de sus funcionalidades encontramos la posibilidad de :</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<OL>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">
	Introducir estructuras scommand</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">
	Extraer estructuras scommand</P>
</OL>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Los
dos puntos mencionados anteriormente permiten manipular comandos con
m&uacute;ltiples pipes.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Dicho
TAD es un arreglo de scommands. A dem&aacute;s permite saber si
existe un &amp; (amperson) dentro de los scommand almacenados.</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Dentro de las funciones principales podemos mencionar:</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><B><I>pipeline_t
pipeline_create(void)</I> </B><SPAN STYLE="font-weight: medium">Crea
el la estructura spipeline</SPAN></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><I><B>void
pipeline_destroy(pipeline_t ps) </B></I><SPAN STYLE="font-weight: medium"><SPAN STYLE="font-style: normal">Destruye
la estructura spipeline</SPAN></SPAN></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><I><B>void
pipeline_push_back(pipeline_t ps, const scommand_t sc) </B></I><SPAN STYLE="font-weight: medium"><SPAN STYLE="font-style: normal">Inserta
un elemento en la estructura spipeline</SPAN></SPAN></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><I><B>scommand_t
pipeline_get_front(pipeline_t ps) </B></I><SPAN STYLE="font-weight: medium"><SPAN STYLE="font-style: normal">retorna
un elemento de la estructura spipeline</SPAN></SPAN></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none; page-break-before: always">
<BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm; font-style: normal"><FONT SIZE=4><U><B>Funciones
del sistema.</B></U></FONT></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Para
poder implementar el Baahs se usaron llamadas a distintas funciones
del sistema. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; text-decoration: none">Las
mas importantes son:</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><U><B>Usadas para Ejecucion
de los comandos:</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<UL>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">pipe</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">dup</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">fork</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">execv</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">wait</P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><U><B>Usadas para
manipulacion de variables de entorno:</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">getenv</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">setenv</P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><U><B>Usadas para manejo de
strings:</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">strlen</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">strncat</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; text-decoration: none">strcpy</P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><U><B>Usadas para manejo de
errores:</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
	perror</P>
	<LI><P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
	assert</P>
</UL>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><U><B>Codificaci&oacute;n
implementada.</B></U></P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Se implement&oacute; tabulaci&oacute;n de 4 espacio ya que
consideramos que permit&iacute;a una buena diferenciaci&oacute;n de
los bloques.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Ejemplo de la implementaci&oacute;n utilizada:</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<I>if(condicion)</I></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<I>{</I></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<I>	tmp=1;</I></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<I>}</I></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Usamos programaci&oacute;n
defensiva de la siguiente forma:</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">En caso de ocurrir
errores en las funciones, &eacute;stas retornan NULL.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">En los procedimientos se
colocaron condiciones de assert para los invariantes.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Se checkean que las
allocaciones de memoria se hayan podido realizar.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">No pasar par&aacute;metros
incorrectos a las funciones. (ejemplo: NULL a strlen).</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Adem&aacute;s se utiliz&oacute;
la funci&oacute;n perror() para retornar mensajes de error en caso de
que ocurran.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Para la realizaci&oacute;n
del baash, se utilizaron las siguientes herramientas:</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Editor: <B>Kate.</B></P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm">Compilaci&oacute;n:
	<B>GNU Compiler Collection (gcc) y make (para facilitar la
	compilaci&oacute;n).</B></P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium">
	Debugging: <B>GNU Debugger (gdb).</B></P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium">
	Debugging de Memoria dinamica, contol de Memory Leaks, y profiling:
	<B>Valgrind</B>.</P>
</UL>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
</P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm"><U><B>Desarrollo</B></U></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
En una primera etapa del desarrollo se realiz&oacute; una
investigaci&oacute;n exhaustiva sobre el modo de ejecuci&oacute;n de
procesos por medio de las llamadas al sistema (System Calls). Tambien
esta instancia consisti&oacute; en la definici&oacute;n de los TAD's
a utilizar, con  la posterior divisi&oacute;n de las tareas,
realiz&aacute;ndose en 3 partes:</P>
<UL>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
	Parseo</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
	Transformaci&oacute;n</P>
	<LI><P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
	Ejecuci&oacute;n</P>
</UL>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Siendo Ejecuci&oacute;n, la parte que mas investigaci&oacute;n y
tiempo de trabajo requiri&oacute;.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Para ella se consultaron numerosas &ldquo;man pages&rdquo;, &ldquo;info
pages&rdquo;, manuales de programaci&oacute;n (Advanced Linux
Programming) y fuentes varias provenientes de Internet.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Las dos primeras partes (Parseo y Transformaci&oacute;n) demandaron
principalmente la implementaci&oacute;n de funciones para el manejo
de strings. Se uso el String Tokeneizer provisto por la c&aacute;tedra,
para la divisi&oacute;n de strings. requiri&oacute; en la primera
etapa del proceso.</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Surgieron dificultades en el momento de implementar las llamadas del
sistema  para manipular los procesos. los problemas surg&iacute;an
con el mal uso de los File Descriptors. Luego fueron resueltos los
inconvenientes. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
La intercepci&oacute;n de se&ntilde;ales no fue implementada. Se
agregaron los comandos Builtin CD, que permite cambiar de directorio
y EXIT, que brinda la salida del programa. 
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
Solo se agrego la funcionalidad para un &uacute;nico pipe. Una linea
de comando valida seria:</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<I>comando opciones &lt; redir_in | comando2 opciones &gt; redir_out</I></P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm; page-break-before: always">
<FONT SIZE=4 STYLE="font-size: 16pt"><U><B>Conclusi&oacute;n</B></U></FONT></P>
<P ALIGN=CENTER STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<FONT SIZE=3>Podemos concluir diciendo que haber realizado este
proyecto, provoco que tuvi&eacute;ramos que organizarnos para poder
dividir las tareas a realizar, ya que el proceso de investigaci&oacute;n
requiri&oacute; que cada integrante se concentrara en un tema
especifico, para poder obtener los distintos m&oacute;dulos del Baahs
en el menor tiempo posible. </FONT>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<FONT SIZE=3>A dem&aacute;s nos enriqueci&oacute; en el estilo de
programaci&oacute;n. El hecho de modularizar las cosas y adoptar un
estilo de programaci&oacute;n ayudo a ver y comprender el c&oacute;digo
realizado por los otros integrantes. </FONT>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<FONT SIZE=3>La utilizaci&oacute;n de las llamadas al sistema, nos
brindo amplia informaci&oacute;n acerca de como funcionan los
procesos en el sistema operativo, d&aacute;ndonos un panorama mucho
mas amplio del que ten&iacute;amos al momento previo de realizar el
proyecto.</FONT></P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm; font-weight: medium; text-decoration: none">
<BR>
</P>
<P ALIGN=JUSTIFY STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
</BODY>
</HTML>